有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

unicode UTF8到Java中的EBCDIC

我们的要求是向大型机发送EBCDIC文本。我们有一些汉字,因此UTF8格式。 那么,有没有办法将UTF-8字符转换为EBCDIC

谢谢, 拉吉莫汉


共 (4) 个答案

  1. # 1 楼答案

    您始终可以使用IBM Java工具箱(JTOpen),特别是jt400中的com.ibm.as400.access.AS400Text类。罐子

    内容如下:

    int codePageNumber = 420;
    String codePage = "CP420";
    String sourceUtfText = "أحمد يوسف صالح";
    
    AS400Text converter = new AS400Text(sourceUtfText.length(), codePageNumber);
    byte[] bytesData = converter.toBytes(sourceUtfText);
    String resultedEbcdicText = new String(bytesData, codePage);
    

    我使用了代码页420及其相应的编码java表示CP420,此代码页用于阿拉伯语文本,因此,您应该为中文文本选择合适的代码页

  2. # 2 楼答案

    EBCDIC有许多8位代码页。其中许多都受到VM的支持。看看Charset.availableCharsets().keySet(),EBCDIC页面名为IBM...(正如Charset.forName("IBM500").aliases()所示,有类似cp500的别名表示IBM500

    有两个问题:

    1. 如果EBCDIC的不同代码页中包含字符,这将没有帮助
    2. 我不确定这些字符集是否在windows之外的任何vm中可用

    首先,请看一下this approach。第二,在所需的目标运行时上进行一次尝试;-)

  3. # 3 楼答案

    假设您的目标系统是IBM大型机或中端系统,它完全支持其JVM中内置的所有EBCDIC编码,即名为CPxxxx的编码,对应于IBM CCSID(CP代表代码页)。您需要在主机端进行翻译,因为客户端没有必要的编码支持

    由于Unicode是DBCS或更大的,并且支持每一个已知字符,因此您很可能会针对多个EBCDIC编码;因此,您可能会以某种方式配置这些编码。尝试仅使用您的客户机Unicode(UTF-8、UTF-16等),在数据到达主机和/或离开主机系统时进行转换

    除了需要在主机端进行翻译外,其机制与任何Java翻译相同;e、 g.新字符串(字节、编码)和字符串。getBytes(编码),以及各种NIO和writer类。这真的没有什么神奇之处——它与在ISO 8859-x和Unicode或任何其他SBC(或有限的DBC)之间进行转换没有什么不同

    例如:

    byte[] ebcdta="Hello World".getBytes("CP037");  // get bytes for EBCDIC codepage 37
    

    您可以找到有关IBM's documentation website的更多信息

  4. # 4 楼答案

    对于中端AS/400(现在的IBMi)来说,最好的选择是使用IBMJavaToolkit(jt400.jar),它可以透明地完成所有这些事情(可能稍微暗示一下)

    请注意,在Java内部,字符是16位的值,而不是UTF-8(这是一种编码)